]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
IconGrid: don't force the size of the icon
authorGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 20 Dec 2011 18:11:07 +0000 (19:11 +0100)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 20 Dec 2011 18:25:52 +0000 (19:25 +0100)
Forcing the icon size will distort it unnecessarily, and will
in any case not work if showing an animation (which is a ClutterGroup).
Instead, set the size on the bin, and make it align its child
if needed.

https://bugzilla.gnome.org/show_bug.cgi?id=666606

js/ui/iconGrid.js

index 1b9c905126ba29c9bfa4e7458773b536b0a563f0..b93f6c01801bd3410a87584c49b7157c22a983bf 100644 (file)
@@ -35,7 +35,8 @@ const BaseIcon = new Lang.Class({
         this.actor.set_child(box);
 
         this.iconSize = ICON_SIZE;
-        this._iconBin = new St.Bin();
+        this._iconBin = new St.Bin({ x_align: St.Align.MIDDLE,
+                                     y_align: St.Align.MIDDLE });
 
         box.add_actor(this._iconBin);
 
@@ -125,12 +126,12 @@ const BaseIcon = new Lang.Class({
         this.iconSize = size;
         this.icon = this.createIcon(this.iconSize);
 
+        this._iconBin.child = this.icon;
+
         // The icon returned by createIcon() might actually be smaller than
         // the requested icon size (for instance StTextureCache does this
         // for fallback icons), so set the size explicitly.
-        this.icon.set_size(this.iconSize, this.iconSize);
-
-        this._iconBin.child = this.icon;
+        this._iconBin.set_size(this.iconSize, this.iconSize);
     },
 
     _onStyleChanged: function() {
@@ -145,6 +146,11 @@ const BaseIcon = new Lang.Class({
             size = found ? len : ICON_SIZE;
         }
 
+        // don't create icons unnecessarily
+        if (size == this.iconSize &&
+            this._iconBin.child)
+            return;
+
         this._createIconTexture(size);
     }
 });